package com.example.myanimator.avoidxfermode.view;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.view.View;

import com.example.myanimator.R;

/**
 * @author tgw
 * @date 2021/4/1
 * @describe 过时
 */


/**
 * 模式总结
 * 在实际应用中，我们可以从以下三个方面来决定使用哪种模式。
 * ( 1）目标图像和源图像混合，需不需要生成颜色的叠加特效 如果需要 ，则从颜色叠加
 * 相关模式中选择，有 Mode ADD （饱和度相 ）、 Mode.DARKEN （变暗） Mode.LIGHTEN
 * （变亮〉、 Mode.MULTIPLY （正片叠底〉、 Mode.OVERLAY （叠加）、 Mo e.SCREEN （滤色）。
 * • 303 .
 * Android 自定义控件开发入门与实战
 *（2 ）当不需要特效，而需要根据某张图片的透明像素来裁剪时，就需要使用 SRC 相关模
 * 式或 DST 关模式了。而 SRC 相关模式与 DST 相关模式是相通的，唯一不同的是决定当前
 * 哪个图像是目标图像和源图像
 * (3 ）当需要清空图像时，使用 Mode .CLEA 模式。
 *
 * //详细可看博客：https://blog.csdn.net/iispring/article/details/50472485
 */
public class AvoidXfermodeView extends View {
    private Paint mPaint;
    private Bitmap mBmp;

    public AvoidXfermodeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        mPaint = new Paint();
        mPaint.setColor(Color.RED);
        mBmp = BitmapFactory.decodeResource(getResources(), R.drawable.dog);
    }

    @SuppressLint("DrawAllocation")
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        int width = getWidth() / 2;
        int height = width * mBmp.getHeight() / mBmp.getWidth();
        int layerid = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
        canvas.save();
//        canvas.drawBitmap(dstBmp, 0,0 , mPaint);
        canvas.drawBitmap(mBmp, null, new Rect(0, 0, width, height), mPaint);
        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));

//        canvas.drawRect(0, 0, width, height, mPaint);

//        canvas.drawRect(0, 0, width, height, mPaint);
        canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.flower), null, new Rect(0, 0, width, height), mPaint);

        canvas.restore();
    }
}
